package org.jflame.commons.crypto;

/**
 * 常用加密算法名称枚举
 * 
 * @author charles.zhang
 */
public enum Alg implements KeyAlgName {

    AES(0),
    Blowfish(0),
    DES(0),
    DESede(0),
    PBEWithMD5AndDES(0),
    PBEwithSHA1AndDESede(0),
    PBEWithSHA1AndRC4_128(0),
    PBEWithHmacSHA1AndAES_128(0),
    PBEWithHmacSHA1AndAES_256(0),
    PBEWithHmacSHA256AndAES_128(0),
    PBEWithHmacSHA256AndAES_256(0),
    PBEWithHmacSHA512AndAES_128(0),
    PBEWithHmacSHA512AndAES(0),
    /**
     * 国密非对称加密算法
     */
    SM2(1),
    /**
     * 国密对称加密算法
     */
    SM4(0),
    RC2(0),
    RC4(0),
    RSA(1);

    /**
     * 构造函数
     * 
     * @param _type 0=对称加密,1=非对称加密
     */
    private Alg(int _type) {
        type = _type;
    }

    private int type = 0;

    /**
     * 是否对称加密算法
     * 
     * @return
     */
    public boolean isSymmetric() {
        return this.type == 0;
    }

    /**
     * 非对称加密算法
     * 
     * @return
     */
    public boolean isAsymmetric() {
        return this.type == 1;
    }

    @Override
    public String keyAlgorithm() {
        if (this == SM2) {
            return "EC";
        } else if (this == RC4) {
            return "ARCFOUR";
        } else {
            return this.name();
        }
    }

}
